import Vue from "vue";
import {cartAdd,cartGet,cartUpdate} from '../api/user'

export default {
  namespaced: true,
  state: () => ({
    cartList: [
      // {
      //   ischeck:true,
      //   stock_id: 1000701,
      //   title: "畅呼吸防护口罩（花粉、粉尘、PM2.5、病菌）",
      //   sub_title: "五层防护、高达 98% 的平均过滤效率",
      //   image:
      //     "https://resource.smartisan.com/resource/ef67ff9577c62979930b356a37b86251.jpg",
      //   imgs: [
      //     "https://resource.smartisan.com/resource/ef67ff9577c62979930b356a37b86251.jpg",
      //     "https://resource.smartisan.com/resource/6e21fd5af69965142e1a50dca189eb7e.jpg",
      //   ],
      //   price: 99,
      //   num:1,
      //   limit_num: 5,
      //   detail: {
      //     color: "#FBF084",
      //     color_name: "绿色",
      //   },
      // },
      // {
      //   stock_id: 1000702,
      //   title: "畅呼吸防护口罩（花粉、粉尘、PM2.5、病菌）",
      //   sub_title: "五层防护、高达 98% 的平均过滤效率 粉色",
      //   image:
      //     "https://resource.smartisan.com/resource/07d77f3a1921fa06e4e5b2f1cdf1a7c8.jpg",
      //   imgs: [
      //     "https://resource.smartisan.com/resource/07d77f3a1921fa06e4e5b2f1cdf1a7c8.jpg",
      //     "https://resource.smartisan.com/resource/967c4d4519aaae1734c727a22def2537.jpg",
      //   ],
      //   price: 99,
      //   num:2,
      //   ischeck:false,
      //   limit_num: 5,
      //   detail: {
      //     color: "#F8ACF4",
      //     color_name: "粉色",
      //   },
      // },
    ],
  }),
  getters:{
    allInfo(state){ //统计购物车总计信息
        let allNum = 0
        let allPrice = 0
        let allCheck = true  //全选状态
        let checkNum = 0   //已选商品总数
        let checkPrice = 0  //应付总额
        state.cartList.forEach(item=>{
            allNum += item.num
            allPrice += item.num * item.price
            if(!item.ischeck){
              allCheck = false
            }
            if(item.ischeck){
              checkNum += item.num
              checkPrice += item.num * item.price
            }
        })
        return {
            allNum,allPrice,allCheck,
            checkNum,checkPrice
        }
    }
  },
  mutations:{
      initCartMut(state,cartlist){ //初始化购物车列表
        state.cartList = cartlist
      },
      cartAddMut(state,obj){ //新增商品
        // 已有商品，改数量
        let {cartList} = state
        console.log(cartList);
        for(let i=0;i<cartList.length;i++){
            if(cartList[i].stock_id === obj.stock_id){
                cartList[i].num++
                return
            }
        }
        // 新商品，加对象
        // obj.num=1  //给新商品设定默认数量,这种写法添加的属性是非响应式的
        
        state.cartList.push(obj)
      },
      cartCheckMut(state,idx){ //单选功能
        state.cartList[idx].ischeck = !state.cartList[idx].ischeck
      },
      cartAllCheckMut(state,bool){  // 全选功能     bool代表原来的全选状态
        state.cartList.forEach(item=>{
          item.ischeck = !bool
        })
      },
      cartNumMut(state,obj){  //数量控制  bool=true代表加操作
        let {idx,bool=true} = obj
        let {num,limit_num} = state.cartList[idx]
        if(bool){
          num<limit_num ? state.cartList[idx].num++ : ''
        }else{
          num>1 ? state.cartList[idx].num-- : ''
        }
      },
      cartDelMut(state,idx){ //删除
        state.cartList.splice(idx,1)
      },
      cartDelCheckMut(state){  // 删除已选中
        let {cartList} = state
        // 方法1:正向删除
        // for(let i=0;i<cartList.length;i++){
        //   if(cartList[i].ischeck){
        //     state.cartList.splice(i,1)
        //     i--  //避免漏删
        //   }
        // }
        // 方法2:逆向删除
        for(let i=cartList.length-1;i>=0;i--){
          if(cartList[i].ischeck){
            state.cartList.splice(i,1)
          }
        }
      }
  },
  actions:{
    initCartAct(context,userid){ //请求对应用户的购物车数据
      cartGet(userid).then(res=>{
        console.log(res);
        context.commit('initCartMut',res.data.data)
      })
    },
    addCartAct(context,obj){ //此处的obj是购物车数据，但必须包含userid:用户的_id
      // 已有商品，则更新数据库中的商品数量
      let {cartList} = context.state
      console.log(cartList);
      for(let i=0;i<cartList.length;i++){
          if(cartList[i].stock_id === obj.stock_id){
              let {num,_id} = cartList[i]
              num++
              cartUpdate(_id,num).then(res=>{
                context.commit('cartAddMut',obj)
              })
              return
          }
      }
      // 新商品，向数据库新增数据
      Vue.set(obj,'num',1)  //添加响应式数据字段
      Vue.set(obj,'ischeck',true)
      cartAdd(obj).then(res=>{
        console.log(res);
        if(res.data.code===101){
          context.commit('cartAddMut',obj)
        }
      })
    },
    
  }
};
